home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume18 / mush6.4 / part01 next >
Encoding:
Internet Message Format  |  1989-03-12  |  59.3 KB

  1. Subject:  v18i023:  Mail user's shell version 6.4, Part01/19
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: Dan Heller <island!argv@sun.com>
  7. Posting-number: Volume 18, Issue 23
  8. Archive-name: mush6.4/part01
  9.  
  10.  
  11.  
  12. [  MUSH is a mail program.  It runs with SunTools and therefore replaces
  13.    MailTool.  It runs under Curses, and can emulate GNU Emacs rmail, and
  14.    it has a line-oriented mode that resembles tcsh.  It also emulates
  15.    UCBMail.  Dan says this release has no known outstanding bugs.
  16.    Is this the ultimate mail program?  I dunno, but it's probably
  17.    big enough to be close.  --r$  ]
  18.  
  19. [  Please read the file "PACKNOTES."  It's probably worthwhile to get
  20.    in the habit of scanning for that file as well as README files.  --r$  ]
  21.  
  22. [  I am out of town the rest of the week.  If something blows up while this
  23.    is being automatically posted, sorry.  --r$  ]
  24.  
  25. #! /bin/sh
  26. # This is a shell archive.  Remove anything before this line, then unpack
  27. # it by saving it into a file and typing "sh file".  To overwrite existing
  28. # files, type "sh file -c".  You can also feed this as standard input via
  29. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  30. # will see the following message at the end:
  31. #        "End of archive 1 (of 19)."
  32. # Contents:  MANIFEST PACKNOTES README README-6.1 README-6.2 README-6.3
  33. #   README-6.4 check.pr coffee.cup.pr cycle.pr dn.arrow.pr envelope.pr
  34. #   glasses.pr options.h up.arrow.pr write.pr
  35. # Wrapped by rsalz@papaya.bbn.com on Mon Mar 13 19:25:05 1989
  36. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  37. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  38.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  39. else
  40. echo shar: Extracting \"'MANIFEST'\" \(2415 characters\)
  41. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  42. X   File Name        Archive #    Description
  43. X-----------------------------------------------------------
  44. X Gnurc                      2    
  45. X MANIFEST                   1    
  46. X Mailrc                     2    
  47. X PACKNOTES                  1    1 Warnings about long lines, etc
  48. X README                     1    
  49. X README-6.0                 2    
  50. X README-6.1                 1    
  51. X README-6.2                 1    
  52. X README-6.3                 1    
  53. X README-6.4                 1    
  54. X addrs.c                   15    
  55. X advanced.mushrc            3    
  56. X bind.c                     9    
  57. X bindings.h                 2    
  58. X check.pr                   1    
  59. X cmd_help                  11    
  60. X coffee.cup.pr              1    
  61. X commands.c                13    
  62. X config.h-dist              2    
  63. X curs_io.c                  6    
  64. X curses.c                  12    
  65. X cycle.pr                   1    
  66. X dates.c                    4    
  67. X dn.arrow.pr                1    
  68. X doproc.c                   5    
  69. X edit_menu.c                2    
  70. X envelope.pr                1    
  71. X execute.c                  3    
  72. X expr.c                     3    
  73. X file.c                     5    
  74. X fkeys.c                    7    
  75. X folders.c                  7    
  76. X glasses.pr                 1    
  77. X hdr_panel.c                2    
  78. X hdr_procs.c                3    
  79. X hdrs.c                     9    
  80. X help.c                     4    
  81. X init.c                     7    
  82. X lock.c                     2    
  83. X loop.c                    14    
  84. X macros.c                   4    
  85. X mail.c                    16    
  86. X mail.icon.1                2    
  87. X mail.icon.2                2    
  88. X main.c                     4    
  89. X main_panel.c               4    
  90. X makefile.bsd               2    
  91. X makefile.sun               2    
  92. X makefile.sys.v             2    
  93. X makefile.xenix             2    
  94. X misc.c                     8    
  95. X msgs.c                    11    
  96. X mush.1.1                  19    (part 1)
  97. X mush.1.2                  18    (part 2)
  98. X mush.1.3                  17    (part 3)
  99. X mush.h                    10    
  100. X options.c                  4    
  101. X options.h                  1    
  102. X pick.c                     6    
  103. X print.c                    3    
  104. X rite.c                     3    
  105. X sample.mushrc              3    
  106. X select.c                   6    
  107. X setopts.c                  8    
  108. X signals.c                  5    
  109. X sort.c                     3    
  110. X strings.c                  5    
  111. X strings.h                  2    
  112. X tool.c                     3    
  113. X tool_help                 10    
  114. X up.arrow.pr                1    
  115. X viewopts.c                 6    
  116. X write.pr                   1    
  117. END_OF_FILE
  118. if test 2415 -ne `wc -c <'MANIFEST'`; then
  119.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  120. fi
  121. # end of 'MANIFEST'
  122. fi
  123. if test -f 'PACKNOTES' -a "${1}" != "-c" ; then 
  124.   echo shar: Will not clobber existing file \"'PACKNOTES'\"
  125. else
  126. echo shar: Extracting \"'PACKNOTES'\" \(85 characters\)
  127. sed "s/^X//" >'PACKNOTES' <<'END_OF_FILE'
  128. X
  129. XFile "mush.1" was split because of its size; to create it, do
  130. X    cat mush.1.? >mush.1
  131. END_OF_FILE
  132. if test 85 -ne `wc -c <'PACKNOTES'`; then
  133.     echo shar: \"'PACKNOTES'\" unpacked with wrong size!
  134. fi
  135. # end of 'PACKNOTES'
  136. fi
  137. if test -f 'README' -a "${1}" != "-c" ; then 
  138.   echo shar: Will not clobber existing file \"'README'\"
  139. else
  140. echo shar: Extracting \"'README'\" \(14815 characters\)
  141. sed "s/^X//" >'README' <<'END_OF_FILE'
  142. X/* @(#)README    2.5    (c) copyright 10/24/87    (Dan Heller) */
  143. X
  144. XAuthor:
  145. X    Dan Heller
  146. X
  147. XNetwork addresses:
  148. X    island!argv@sun.com        dheller@ucbcory.berkeley.edu
  149. X    argv@garp.mit.edu
  150. X
  151. XWhen sending mail, mail to the addresses in the order given.
  152. X
  153. XContained is the source for "Mail User's Shell" (MUSH), a "Mail User
  154. XAgent" (MUA) that is designed to manage electronic mail on most UNIX
  155. Xsystems.  That is, mush is used by users to read mail, sort it, edit
  156. Xit, delete it, or use it to act as an interface to send mail to others.
  157. XA Mail Transport Agent (MTA) is the program which mush communicates with
  158. Xthat actually -delivers- mail.
  159. X
  160. XRedistribution of this code is permitted as long as all copyright notices
  161. Xremain intact and all other identifying notices remain in the code and
  162. Xin the binary.  This includes message headers on outgoing mail and the
  163. Xstartup message.  Future releases will extract the release version from
  164. Xthe message headers of mush-originated messages to aid in implementing
  165. Xfeatures and providing backwards compatibility with previous versions.
  166. X
  167. XWith that out of the way...
  168. X
  169. XMush runs on various flavors of unix.  To build mush, you should identify
  170. Xwhich unix you are running:
  171. X
  172. X    Sun (all versions from 2.0 and higher).
  173. X    BSD (versions 4.2 and up)
  174. X    System-V / Version 7 / System III (Bell Labs)
  175. X    Xenix (this might be tricky)
  176. X
  177. XYou will need to copy "config.h-dist" to config.h and edit it to reflect
  178. Xthe system dependencies described there.  These consist of "compile-time
  179. Xdefinitions and macros."
  180. X
  181. XWhen it comes to "compile-time definitions", you may use one of two methods:
  182. X
  183. X    #define DEFINITION    /* in the config.h file */
  184. X    -DDEFINITION    /* in your makefile */
  185. X
  186. XIf the definition is of the form MACRO="string", then use:
  187. X    -DMACRO=string
  188. X    #define MACRO string
  189. X
  190. X---------------
  191. XWhich makefile to use:
  192. X
  193. XIf you are on a Sun Workstation:
  194. X
  195. X    makefile.sun applies only to suns and creates a binary called "mush."
  196. X    If the binary ends in "tool", then the graphics (suntools) mode will be
  197. X    used by default on invocation. Otherwise, you must specify -t for
  198. X    toolmode on sun workstations.  The SUNTOOL define must is in the
  199. X    makefile.sun in order to compile the suntools version.  You don't need
  200. X    to be running sunview; old sunwindows (2.0+) may be used.
  201. X
  202. X    If you know that you're not going to use the suntools mode then you
  203. X    should use makefile.bsd so that SUNTOOL won't be defined and unnecessary
  204. X    files not be compiled so the binary will be made smaller.
  205. X
  206. XIf you are on a BSD UNIX machine:
  207. X
  208. X    You should use the makefile.bsd makefile.
  209. X
  210. XIf you are using XENIX:
  211. X
  212. X    The files makefile.x286 and makefile.x386 were created especially for
  213. X    XENIX machines.  makefile.x286 is for Intel's 80286 processor and the
  214. X    makefile.x386 is for the 80386 processor.  The xenix makefiles are
  215. X    tuned for SCO's version of xenix.  This does not mean that it won't
  216. X    work under other xenix versions -- however, some changes may have to
  217. X    be made by hand.  If your xenix release is sco-xenix 2.2 or higher
  218. X    then you must define USG. The libraries to use may be -ltinfo instead
  219. X    of -lcurses -ltermlib.  This is because the curses package may use
  220. X    termio instead of the sgtty data structure.  If you want to use termio
  221. X    anyway, even if you're on an older xenix system (that supports termio),
  222. X    then you may define USG anyway.
  223. X
  224. XIf you are on a system-v Bell labs machine:
  225. X
  226. X    makefile.sys.v is for unix machines that are not running any flavor of
  227. X    BSD and probably running a system-v flavor of unix -- this defines USG
  228. X    so that termio will be used.
  229. X
  230. XWhen you decide on an appropriate makefile, _copy_ it to a new file called
  231. XMakefile.
  232. X---------------
  233. X
  234. XYour Mail Transport Agent:
  235. XSendmail:
  236. X    Mush was originally designed to use sendmail as the Mail Transport Agent.
  237. X    However, other MTA's will work.  The MTA you use should be defined in
  238. X    config.h under the MAIL_DELIVERY macro define. By default,
  239. X        /usr/lib/sendmail -i
  240. X    is used -- the option, -i, tells sendmail not to accept "." on a line
  241. X    by itself as an end-of-file marker.  This has been bosleted by "-oi",
  242. X    but "-i" still works and is backwards compatible with older sendmails.
  243. X
  244. XDelivermail:
  245. X    Some mailers such as delivermail and MMDF use special strings to separate
  246. X    messages stored in a folder.  Older delivermail versions would use "^C".
  247. X    Whatever your system uses, if it is NOT "From " (just the first 5 chars
  248. X    on a line matching "From "), then this string should be defined in
  249. X    config.h with the MSG_SEPARATOR macro.
  250. X
  251. XMMDF:
  252. X    NOTE: MMDF sites can define MMDF and not worry about MSG_SEPARATOR.  See
  253. X    config.h-dist if you run MMDF.
  254. X    Since MMDF can deliver users' mail in their home directories, there is
  255. X    a new define to specify this option: -DHOMEMAIL
  256. X    Since MMDF uses its own libraries to do file locking, you should add the
  257. X    appropriate library to the LIBS list in your makefile.
  258. X
  259. XAll others:
  260. X    Chances are, your MTA uses the "From " format to separate messges in
  261. X    a folder.  This includes, /bin/mail, rmail, smail, execmail, and so on.
  262. X    Unless you *know* otherwise, assume this to be the case with your MTA.
  263. X
  264. X    If no MSG_SEPARATOR is specified, what mush looks for is a pattern of
  265. X    From <string> <date format>
  266. X    The "string" is usually the return address of the sender and the date
  267. X    format is supposed to be in ctime(3) format.  Even still, some MTAs
  268. X    don't conform completely to this standard and vary slightly in
  269. X    implementation.  The function load_folder() (which reads in messages)
  270. X    contains a scanf which looks for this format to verify that this is
  271. X    indeed a new message being scanned.  If you install mush and find that
  272. X    you are entering a shell, but mush indicates there are no messages in
  273. X    the folder, it could be that you have a weird "From " line format and
  274. X    the scanf() call needs to be either modified or removed.
  275. X
  276. X#defines specifically for your MTA:
  277. X
  278. XOLD_MAILER:
  279. X    Some MTA's, especially older ones like /bin/mail or execmail (xenix), do
  280. X    not conform to RFC822 and provide the required headers: From: and Date:.
  281. X    To remedy, either #define OLD_MAILER in config.h or add the -D option
  282. X    OLD_MAILER in the appropriate makefile: -DOLD_MAILER.  What this does is
  283. X    make sure that there is a From: and Date: header in outgoing messages and
  284. X    in folders (such as "set record").  Sendmail should not define this.
  285. X
  286. XUUCP:
  287. X    If your machine talks to other computers via uucp _and_ you have the
  288. X    macro OLD_MAILER defined,  then you may want to define UUCP.  This will
  289. X    change the From: line to have your return address look like "host!user"
  290. X    rather than "user@host" (which is the default).  If you don't have
  291. X    OLD_MAILER defined, this define does nothing.
  292. X
  293. XNO_COMMAS:
  294. X    If your mailer does *NOT* like commas between addresses (pre-3.0 smail,
  295. X    xenix and sys-v machines), then you should define NO_COMMAS.  Otherwise,
  296. X    you will get mailer-daemon [type] messages back when trying to send mail
  297. X    to multiple users.  Sendmail should not define this.
  298. X
  299. XVERBOSE_ARG:
  300. X    If your mailer does NOT have a verbose option, then you should not have
  301. X    VERBOSE_ARG defined.  Otherwise, define it to be whatever the verbose
  302. X    argument is for your mailer.  The default is -v.
  303. X
  304. XMETOO:
  305. X    Sendmail uses the -m argument to say, "metoo" -- when sending to mailing
  306. X    lists, normally sendmail will send mail to mailing lists, but if you're
  307. X    in that list, you are excluded from getting your own mail.  However, if
  308. X    you have the variable metoo set with your variables, then the METOO
  309. X    argument is passed to sendmail to say, "I know I'm on this mailing list,
  310. X    but send me a copy of my message even tho I sent it."  For sendmail, this
  311. X    is -m.  If your mailer uses something else, then define METOO_ARG in the
  312. X    config.h file.  If you don't have it (sys-v), then this should not be
  313. X    defined.
  314. X
  315. X---------------
  316. XSignals:
  317. XSIGRET:
  318. X    When signals occur in unix, the program can identify a function to be
  319. X    called whenever a specific signal interrupts the process.  That function
  320. X    returns one of two types in unix: int and void.  Because the return value
  321. X    of this function is always ignored, many unix systems are converting
  322. X    their definition of this function from int to void.  Mush has a define:
  323. X    SIGRET which defines what the function should return.
  324. X
  325. X    By default, SIGRET is defined to be "int".
  326. X
  327. X    SunOS4.0 and some system-v machines and some xenix machines should
  328. X    define SIGRET to be void.  If you don't know, leave it alone.  If
  329. X    you guess wrong, you will get compiler "warnings" on lines that read:
  330. X    on_intr();
  331. X    off_intr();
  332. X
  333. X---------------
  334. X
  335. XVPRINTF:
  336. X    This should be defined if your system has the vprintf functions. You
  337. X    *have* these functions if you are running:
  338. X    o system V
  339. X    o xenix
  340. X    o Sun release 3.0 or higher.
  341. X    If you are still not sure, try the following command from your shell:
  342. X
  343. X    % ar t /lib/libc.a | grep vprintf
  344. X
  345. X    If you have it, you'll probably get something like
  346. X    vprintf.o
  347. X    vsprintf.o
  348. X    as output.  If you don't have it, you won't have any output.  If your
  349. X    main C-libraries are not in /lib/libc.a, then find where they are and
  350. X    try the same command using that file.  BSD machines do not have vprintf().
  351. X
  352. X---------------
  353. XThe sprintf() function:
  354. X    If you *know* your system's sprintf returns a char *, you can remove the
  355. X    #define sprintf Sprintf
  356. X    in strings.h.  Careful, not all BSD4.3 machines are alike!  If you don't
  357. X    know for sure, don't change this define.
  358. X
  359. X---------------
  360. XRegular expression defines:
  361. X    If you have REGCMP, this should be defined so that you will use the
  362. X    routines regcmp() and regex() as the regular expression composer/parser.
  363. X    This is true for xenix and System-V Unix.
  364. X    If you don't have REGCMP defined, then the routines re_comp() and re_exec()
  365. X    are used (this is the default for mush).
  366. X    
  367. X    Note that some systems do not have either set of routines in the default
  368. X    libraries.  You must find the library to use and add it to the list of
  369. X    libraries to use.  If this is the case, your link will fail with the
  370. X    errors that regex and re_comp are undefined functions.  Read your man
  371. X    page for regex(3) to find where to locate those libraries.
  372. X
  373. X---------------
  374. XThe select() function call:
  375. X    Mush uses select() to implement macros, mappings and bindings.  If your
  376. X    system is a BSD system, then this is defined for you.  However, with the
  377. X    advent of hybrid bsd/sys-v systems, you may not be able to set BSD, but
  378. X    you know you still have select() --for such systems, define SELECT in
  379. X    your makefile or in config.h.
  380. X    Newer xenix machines have this as so some system-v machines.  If you don't
  381. X    know, mush will use another function although not as optimum as select().
  382. X
  383. X---------------
  384. XThe default Mailrc startup file:
  385. X    A default mailrc should be installed for new users.  UCB mail's default
  386. X    Mailrc works but no mailrc works also. The location of the default
  387. X    file should be defined in config.h.  To have no default mailrc, set the
  388. X    default to /dev/null.
  389. X    For sun systems, the default .mailrc (/usr/lib/Mailrc) does not work
  390. X    very well because sun's Mail is not standard /usr/ucb/Mail.
  391. X    For this reason, sun has not changed the default mailrc file and still
  392. X    resides in /usr/lib/Mail.rc (note this has the "." whereas the other file
  393. X    does not).  The default config.h-dist reflects this.
  394. X
  395. X    There is a supplied Mushrc file with mush, but this is only intended to
  396. X    be used as an example of how to make mush look like ucbMail.  This is a
  397. X    _reduction_ in functionality and its usage is not encouraged.
  398. X
  399. X    There is a Gnurc file which can aid in making mush's curses mode appear
  400. X    to interact similar to gnu-emacs.
  401. X
  402. X---------------
  403. XHelp files:
  404. X    The help files should be placed somewhere which is readable and accessible
  405. X    by all. Failing to do so removes virtually the entire help facility's
  406. X    ability to help anyone.  There is a help file (cmd_help) for command help
  407. X    (e.g. "command -?"), and the tool_help is for the graphics mode (Sun
  408. X    workstations only).  You should define where you want these files in
  409. X    config.h so at runtime, they can be accessed without error.
  410. X
  411. X---------------
  412. X
  413. XYou should now be able to run make.
  414. X
  415. X---------------
  416. XMaintenance:
  417. X
  418. XIf you want to use dbx or any other debugger, or to use your default tty
  419. Xdriver, -e should be used as command line argument when you run the program.
  420. XWhat this flag does is prevents your echo from being turned off and leaving
  421. Xcbreak off, thus, keeping your tty in a sane state.  This prevents the use
  422. Xof mappings and macros (map and map!).  However, curses mode will automatic-
  423. Xally disable that mode.  The -e flag is highly discouraged.
  424. X
  425. XIf you have memory allocation checking and validation (sun 3.0+ ?) then
  426. Xdefine M_DEBUG in the makefile (main.c) and add the library
  427. X/usr/lib/debug/malloc.o to the library list. Do this only if you are
  428. Xfind bugs in the program and suspect memory allocation errors. main.c
  429. Xhas the code which sets the debugging level according to the value of
  430. Xan environment variable.  Because malloc-debugging is so cpu intensive,
  431. Xthe sunwindows program will get a SIGXCPU (cpu time limit exceeded)
  432. Xbecause of the large amount of opening and closing large pixrects and
  433. Xdevices.  For this reason, SIGXPCPU is is caught in main.c.
  434. X
  435. XThe "warning" variable may be set (at runtime in your .mushrc or as
  436. Xa command: "set warning") to aid in finding runtime errors that aren't
  437. Xfatal.
  438. X
  439. XIf you ever get "Message N has bad date: <date string>" then note
  440. Xthe FORMAT of that date and edit dates.c.  There are a number of
  441. X"sscanf"s which you can see match known date formats.  Use them as
  442. Xexamples and insert the new date format you have.
  443. X
  444. XIf you ever add new variables, be sure to add them in viewopts.c and the
  445. Xman page.
  446. X
  447. XIf Mush ever coredumps and you are suspicious about whether or not
  448. Xyour folder (or spool directory) was removed.  Or, if you were editing
  449. Xa letter, you should check for the files .mushXXXXXX and .edXXXXXXX.
  450. XMush won't die without telling you that it's dying and it will ask if you
  451. Xwant to save the .mushXXXXX file and if you actually want it to dump core.
  452. XNote that if you run mush from .suntools and there is a core dump, it
  453. Xprobably wants to do some IO with the console and may hang (not exit)
  454. Xbecause it doesn't know it can't talk to you.
  455. X
  456. XLast attempted, mush passed lint with a small number of errors indicating
  457. Xthat fflush, fclose and other similar functions returned values which
  458. Xwere always ignored.  Sorry.  I did not attempt lint on the suntools mode.
  459. XCurses doesn't lint very well, but even when you lint mush with CURSES
  460. Xdefined, it only complains about the unused curses globals in curses.h.
  461. END_OF_FILE
  462. if test 14815 -ne `wc -c <'README'`; then
  463.     echo shar: \"'README'\" unpacked with wrong size!
  464. fi
  465. # end of 'README'
  466. fi
  467. if test -f 'README-6.1' -a "${1}" != "-c" ; then 
  468.   echo shar: Will not clobber existing file \"'README-6.1'\"
  469. else
  470. echo shar: Extracting \"'README-6.1'\" \(2540 characters\)
  471. sed "s/^X//" >'README-6.1' <<'END_OF_FILE'
  472. Xmush.h --
  473. X    Truncated version ID.
  474. X
  475. X    putchar() redefined fputc(c, stdout), fflush(stdout) because sys-v
  476. X    isn't getting newlines when in curses mode. Isn't stdout supposed
  477. X    to be line buffered?  Does setting cbreak or something change this?
  478. X    If this doesn't fix the problem for sys-v, add setbuf(stdout, NULL) at
  479. X    the top of main.c, but that shouldn't be necessary (in fact, none of
  480. X    this _should_ be necessary).
  481. X
  482. X    SIGCHLD may cause infinite loop on pyramid's cpp 'cause they
  483. X    define SIGCHLD to be SIGCLD.  SIGCHLD is now only defined if it's
  484. X    not already defined.  If your system has SIGCHLD and SIGCLD defined
  485. X    to _different values_ and you have SYSV defined, you may need to
  486. X    check into this, but I doubt your system's that weird.
  487. X
  488. X    glob_flags is now u_long (helps lint)
  489. X
  490. Xloop.c --
  491. X    #ifdef SYSV around signal(SIGCHLD, ...) cuz sys-v doesn't really deal
  492. X    with it correctly.  Best just let it default and forget about it. Note
  493. X    that sys-v'ers won't be able to watch processes die using "debug" anymore.
  494. X
  495. Xcommands.c --
  496. X    Printenv() now takes an argument.  "printenv _var_" will
  497. X    print the varname and value rather than all env variables.
  498. X
  499. Xmail.c --
  500. X    OLD_MAILER and OLD_MAIL now merged to OLD_MAILER.  Too confusing
  501. X    to have both and if either is used, both tend to be used.  Refer to
  502. X    README-6.0 for details.
  503. X
  504. Xprint.c --
  505. X    yet more fixes for varargs.h people.  It seems that pyramid (sys-v/BSD)
  506. X    now have va_start() defined to have an open brace ( { ) and va_end()
  507. X    has the closing brace ( } ).  So, you can't have a starting block
  508. X    be in between each call.  Who writes that stuff?
  509. X
  510. Xstrings.c --
  511. X    Sprintf() now supports varargs and has #ifdef VPRINTF checks.
  512. X    As it turns out, some systems don't have IOSTRG either, but I'm not
  513. X    really up to date on this one.  If you have a problem with it, just
  514. X    remove its reference in the routine and it should work anyway.
  515. X
  516. Xhdrs.c --
  517. X    compose_hdr() should run faster now (thus, any display of headers:
  518. X    'h', 'z', etc...) should be faster due to the code no longer computes
  519. X    the weekday name (Sun, Mon, etc..) unless specifically requested by %D
  520. X    (in which it takes the same amount of time as before).
  521. X
  522. Xcurs_io.c/signals.c --
  523. X    added new function scrn_line which reads a line of text from a line
  524. X    on the curses screen for use by stdout.  It seems that sys-v curses
  525. X    package uses shorts instead of chars to represent each char on the
  526. X    screen.  I use #ifdef A_CHARTEXT to see if this applies to you.
  527. END_OF_FILE
  528. if test 2540 -ne `wc -c <'README-6.1'`; then
  529.     echo shar: \"'README-6.1'\" unpacked with wrong size!
  530. fi
  531. # end of 'README-6.1'
  532. fi
  533. if test -f 'README-6.2' -a "${1}" != "-c" ; then 
  534.   echo shar: Will not clobber existing file \"'README-6.2'\"
  535. else
  536. echo shar: Extracting \"'README-6.2'\" \(2920 characters\)
  537. sed "s/^X//" >'README-6.2' <<'END_OF_FILE'
  538. Xmain.c --
  539. X    New command line argument "-F file".  The file is sourced after
  540. X    the folder has been read in.  There have been requests to allow
  541. X    commands which manipulate messages to be in the .mushrc, but since
  542. X    that can't be done without being able to expand possible shell
  543. X    arguments such as "+folder", an additional source file can be
  544. X    executed before IO to the user happens by specifying this filename.
  545. X    If the flag given is "-F!", then the mush will exit once it is
  546. X    finished with the commands in the file.
  547. X
  548. Xmain.c, mail.c, viewopts.c --
  549. X    A new variable called "tmpdir" has been added.  This path describes
  550. X    the location for all temporary files that mush creates.  If not set,
  551. X    mush will use the user's home directory.  If neither is accessible
  552. X    and writable, then /tmp (defined in config.h) is used.
  553. X
  554. Xmisc.c --
  555. X    when invoking a pager, sometimes cbreak was not getting set.  It
  556. X    wasn't easily reproducible because of a race condition set by a
  557. X    system call.
  558. X
  559. Xpick.c --
  560. X    There is a new option to the "pick" command called -ago.  Now you
  561. X    can pick messages relative to today's date.
  562. X    pick -ago 2 weeks
  563. X    will find all messages two weeks old.  The + and - modifiers will
  564. X    extend time searches:
  565. X
  566. X    pick -ago +2 days
  567. X    will find all messages from two days ago to current.
  568. X
  569. X    pick -ago -1w
  570. X
  571. X    will find all messages from one week ago and back.  You can specify
  572. X    days, weeks, months and years and the syntax is extremely simple.
  573. X
  574. X    pick -ago 2 weeks 1 day
  575. X    pick -ago 1d 2w
  576. X    pick -ago 1 DAY, 2 WEEKS
  577. X    pick -a 1d2w
  578. X
  579. X    are all equivalent.  Note that months map to 30.5 days so March may
  580. X    be confusing.
  581. X
  582. X    The -d option to pick used to specify that dates preceded by '-' meant
  583. X    "on or before" and if there was no '-', then it defaulted to "on or after."
  584. X    It was difficult to find messages on a specific date only.  So now, the
  585. X    change is that "on or after" is specified by preceding a '+' before the
  586. X    date.  thus,
  587. X
  588. X    pick -d 5/2
  589. X
  590. X    *used* to find messages dated on or after May 2.  Now, it only finds
  591. X    messages on May 2 only.  To do messages on or after May 2, specify:
  592. X
  593. X    pick -d +5/2
  594. X
  595. Xhelp.c --
  596. X    help now sends output thru the internal pager in case the
  597. X    help message is very long.  pick -? may be the only problem, but now
  598. X    it's set up to handle arbitrarily long help messages.
  599. X
  600. Xmail.c --
  601. X    You can specify the internal pager use "~p internal" while editing
  602. X    a message.
  603. X
  604. X    Autosigning now precedes the signature file with "\n-- \n" for
  605. X    compatibility with news and other programs.
  606. X
  607. Xexecute.c --
  608. X    A "syntax" type error would cause xenix systems to incorrectly
  609. X    evaluate the wait() loop.  The change:
  610. X    while ((pid = wait(&status) != -1) && ...
  611. X    has been changed to:
  612. X    while ((pid = wait(&status)) != -1 && ...
  613. X
  614. Xmush.1 --
  615. X    The man page has been updated as well to reflect the above changes.
  616. END_OF_FILE
  617. if test 2920 -ne `wc -c <'README-6.2'`; then
  618.     echo shar: \"'README-6.2'\" unpacked with wrong size!
  619. fi
  620. # end of 'README-6.2'
  621. fi
  622. if test -f 'README-6.3' -a "${1}" != "-c" ; then 
  623.   echo shar: Will not clobber existing file \"'README-6.3'\"
  624. else
  625. echo shar: Extracting \"'README-6.3'\" \(9662 characters\)
  626. sed "s/^X//" >'README-6.3' <<'END_OF_FILE'
  627. XThe file, "README" is always being updated for brand new users on how
  628. Xto install mush for the first time.  It can be referenced for earlier
  629. Xinfo as well as previous README's.  A new README-<versionID> file (like
  630. Xthis one) will accompany each new upgrade.
  631. X
  632. XFor those who wish to be on the mush-users mailing list, please
  633. Xsend requests to:
  634. X    mush-users-request@garp.mit.edu
  635. XI do not maintain this list, so don't mail me.
  636. XThis mailing list discusses mush usage, internals, portability to new
  637. Xhardware or non-standard unix systems, future updates/enhancements,
  638. Xand exchange of general info.  Since mush works on all flavors of
  639. Xunix from bsd to sys-v and has three different user interfaces, the
  640. Xgroup of subscribers is quite diverse.  For those who are very
  641. Xinterested in influencing the X interface, now is the time to get
  642. Xyour opinions in for discussion before it's too late.
  643. X
  644. XNew compiler defines:
  645. X    DOT_LOCK
  646. X    Define this if you want mush to use .lock to lock your mbox for
  647. X    updates.  See very last section of this file for detailed info.
  648. X
  649. X    UUCP
  650. X    This should be defined if your MTA does not automatically create a
  651. X    From: header *and* your machine talks to other computers via uucp
  652. X    (probably true for default xenix/sys-v systems).
  653. X
  654. X    NO_COMMAS
  655. X    This should be defined if your mailer does *NOT* like commas
  656. X    between addresses on its command line.  Last I heard, smail is
  657. X    like this as well as default xenix/sys-v mail transport agents.
  658. X    (This used to be defined by OLD_MAILER.)
  659. X
  660. X    Note: if your MTA is "smail", OLD_MAILER should _not_ be set, but
  661. X    NO_COMMAS should be set.  That is as of this release date.
  662. X
  663. X    SIGRET
  664. X    This is defined to be "int" by default.  If your signal() returns
  665. X    void, SIGRET should be defined to be "void".  This mostly applies
  666. X    to SVR3.
  667. X
  668. X    For any of these defines, you do one of two things:
  669. X    (UUCP used as example)
  670. X    1) add -DUUCP in your makefile
  671. X    2) In config.h, add a line which reads:
  672. X       #define UUCP
  673. X
  674. X    For SIGRET, use either "-DSIGRET=void" or "#define SIGRET void"
  675. X
  676. XNew variables:
  677. X    realname (string)
  678. X    Set to the user's real name by:
  679. X    1) The user's real name is gotten from the environment variable NAME.
  680. X    2) The gecos field in the password file
  681. X    Once mush has been started, this name can only be reset by changing
  682. X    the value of realname -- not by changing 1 or 2 above.
  683. X
  684. X    hostname (string)
  685. X    The hostname is automatically set by the system, but if circumstances
  686. X    make this impossible or the hostname is wrong, the user can reset this.
  687. X    See the manual under the VARIABLES section for more info.
  688. X    Important Note to sys-v'ers who can't get their hostname from utsname(2)
  689. X    (xenix, more?), the hostname should probably be set in the default Mailrc
  690. X    defined in config.h.   "set hostname=whatever"
  691. X
  692. X    save_empty (boolean)
  693. X    If set, folders which have all messages deleted are not removed on
  694. X    updates or change folder commands.  The folder is left at zero length.
  695. X    Note, this does not affect the spool mailbox; it is never removed on
  696. X    updates.
  697. X
  698. X    date_received (boolean)
  699. X    If set, message headers are printed with the date received rather than
  700. X    the date sent.  This affects the sorting command; when sorting by date,
  701. X    this variable is checked.
  702. X
  703. XMisc:
  704. X    Addresses that have long uucp paths from the sender would be so long
  705. X    that the "important" part of the path --which includes the sender's
  706. X    login and machine name, found at the tail end of the address, would
  707. X    be cut off.  Such addresses are now shifted to the right if the whole
  708. X    address cannot fit in the specified padding requested by the user.
  709. X    This affects the hdr_format modifiers %a and %f.  If the addresses
  710. X    are shorter than the specified width, there is no change:
  711. X    set hdr_format = "%11a"  # show no more than 11 chars of address
  712. X    If the address is:
  713. X    sun!island!argv
  714. X    then the result will be:
  715. X    island!argv
  716. X    (previously, you'd get "sun!island!" losing the "argv" at the end.)
  717. X
  718. X    Initialization file now understands:
  719. X    if -e filename
  720. X    and
  721. X    if -z filename
  722. X    to test to see if a filename (folder) exists (-e) or zero-length (-z).
  723. X
  724. X    Added SAVED flag to message status.  If a message is saved,
  725. X    this flag is set rather than the DELETE flag.  Messages which
  726. X    have been saved are marked with an 'S' in the status field.
  727. X    All commands which deal with message status have been modified
  728. X    to support this new flag (sort, headers (-H:s), etc...)
  729. X
  730. X    $cdpath can now be read from the environment.  that is, it understands
  731. X    the ':' as a path separator now.
  732. X
  733. X    ":p" can be used to select "preserved" messages.  This adds to the
  734. X    list of :c commands which select messages of status "c". headers -?
  735. X    for more info.
  736. X
  737. Xmain.c --
  738. X    fixed up helpfile assignments for toolmode and removed useless
  739. X    warning messages.
  740. X
  741. X    ignore sigpipe in main() instead of in do_loop().  This fixes the
  742. X    bug where you mail someone without entering the shell and ~p to
  743. X    page your message.
  744. X
  745. Xmail.c --
  746. X    Some mailers don't add the From: header.  Previous versions of
  747. X    mush would add for these machines:
  748. X    From: login
  749. X    Now, the user's real name is added in parens.  Also, if UUCP is
  750. X    defined, the From: line will look like:
  751. X    From: host!user (Real Name)
  752. X    If uucp is not defined:
  753. X    From: user@host (Real Name)
  754. X    This is mostly for uucp systems, so when the user mails to remote
  755. X    sites, the From: line should be correct for accurate replies.
  756. X
  757. X    If fork() failed in toolmode, the error message is no longer
  758. X    overwritten before the user knew the mail couldn't not be sent.
  759. X
  760. X    ~? now uses the internal pager so the help doesn't scroll off the screen.
  761. X
  762. X    The command: "r addr" to reply to a message and add a new address
  763. X    at the same time no longer removes the last character in the first address
  764. X    before adding the new address.
  765. X
  766. X    If autosign has \n's or \t's embedded in the string, they are now
  767. X    expanded to newlines and tabs respectively.  This is also true for
  768. X    using ~$variable to print a variable's value into a letter buffer.
  769. X    For example, the command:
  770. X    set autosign = "\Dan Heller\nisland!argv@sun.com"
  771. X    will cause all outgoing letters to be signed with:
  772. X
  773. X    -- 
  774. X    Dan Heller
  775. X    island!argv@sun.com
  776. X
  777. Xcurses.c --
  778. X    fixed scrn_line() (screen-line: get a line from the screen) so
  779. X    that the following expression is evaluated correctly:
  780. X    changed:
  781. X        if ((buf = mvinch(line, n) & A_CHARTEXT) == '\0')
  782. X    to:
  783. X        if ((buf[n] = (mvinch(line, n) & A_CHARTEXT)) == '\0')
  784. X
  785. Xloop.c --
  786. X    disp_hist() (display history) no longer core dumps if the history
  787. X    command was given from the curses mode using ':' and there was no
  788. X    history created yet.
  789. X
  790. Xdoproc.c (suntools only) --
  791. X    The save menu item would prompt to save in ~/mbox for both the
  792. X    first and second menu items rather than just the first menu item.
  793. X    The result was that you couldn't save to the file described by
  794. X    the second menu item.
  795. X
  796. Xcommands.c --
  797. X    save_msg() modified to support SAVED flag.  Messages are not
  798. X    deleted, but marked saved.  When updating folder, keep_save is
  799. X    checked, and if not set, saved messages are deleted.
  800. X
  801. Xmsgs.c --
  802. X    changed lockf()'s last argument from 0 to 0L.
  803. X
  804. Xmisc.c --
  805. X    Sprintf() (for SYSV) has been modified to correctly deal with
  806. X    varargs.  Sorry, the stuff in print.c still isn't, but someday...
  807. X    Nevertheless, there are currently no bugs known or reported that
  808. X    concern anything in print.c
  809. X
  810. X    The internal pager now works with the -e flag (happy _now_ Dave?)
  811. X
  812. Xpick.c --
  813. X    picking patterns no longer requires the pattern to be in quotes
  814. X    if it contains spaces.  You may now specify:
  815. X    pick -f -i dan heller
  816. X    This example will find messages from "Dan Heller" (-i ignores case).
  817. X
  818. X
  819. XWhat "dot-lock" is and why you may need it...
  820. X
  821. X    When mush updates your mailbox, it needs to lock it so that if new
  822. X    mail is being delivered at the same time, it will wait till mush
  823. X    is done.  Or, if the mail is there first, mush should wait before
  824. X    attempting to lock the file.  This should theoretically prevent new
  825. X    mail from getting lost.  But...
  826. X      Different systems use different locking mechanisms.  By default,
  827. X    mush uses one of flock(), locking(), or lockf() (depending on your
  828. X    system).  Some  systems use a file called the same name as the file
  829. X    you're locking with an appended ".lock" at the end (some Xenix's use
  830. X    /tmp/$USER.mlk).
  831. X      If you define DOT_LOCK, mush will try to lock the mailbox using
  832. X    first check for the .lock file.  If it exists, it loops until it
  833. X    goes away and then it creates it mode 600.  Regardless of whether you
  834. X    use dot-locking, mush will continue to try to use flock(), or whatever.
  835. X      dot-locking requires mush to have write access to the directory where
  836. X    your mailbox exists.  Normally, this directory isn't writable by the
  837. X    average user, so you may have to sgid mush to do this to the group id
  838. X    of the owner of that directory. Mush will get the effective gid at the
  839. X    beginning of the program and immediately reset it to your real gid until
  840. X    the time it needs to lock the file occurs.  It changes back to the sgid,
  841. X    locks, then returns to normal.  There shouldn't be a security problem.
  842. X      If you don't know what I'm talking about here, ignore DOT_LOCK
  843. X    as this is the first attempt at such locking methods and is likely
  844. X    to change.
  845. X      Another warning is that some MTA's don't even follow their own protocol.
  846. X    System V, it has been reported, creates the .lock file without checking
  847. X    to see if it exists (therefore ruining someone else's lock).
  848. X
  849. END_OF_FILE
  850. if test 9662 -ne `wc -c <'README-6.3'`; then
  851.     echo shar: \"'README-6.3'\" unpacked with wrong size!
  852. fi
  853. # end of 'README-6.3'
  854. fi
  855. if test -f 'README-6.4' -a "${1}" != "-c" ; then 
  856.   echo shar: Will not clobber existing file \"'README-6.4'\"
  857. else
  858. echo shar: Extracting \"'README-6.4'\" \(16322 characters\)
  859. sed "s/^X//" >'README-6.4' <<'END_OF_FILE'
  860. X
  861. XNew features/bug fixes to Mail User's Shell (Mush) since version 6.3:
  862. X
  863. XFor general information about mush, comments, bug reports, etc:
  864. X    Dan Heller <island!argv@sun.com>
  865. XExtra special thanx to Bart Schaefer <schaefer@ogccse.ogc.edu>
  866. Xfor his help in fixing some bugs, and adding some new features.
  867. X
  868. XThanx to Marc Rouleau <mer6g@virginia.acc.virginia.edu> for his
  869. Xwork on providing MMDF support.
  870. X
  871. XThe main README has been rewritten to be more easily read.  someday,
  872. Xthis will be mostly replaced by a Configure file once I figure out
  873. XMetaconfig :-).
  874. X
  875. XSeveral "rc" files for demonstrating sample user configuration environments
  876. Xare provided.  Each are documented, but the man page does not reference them.
  877. X
  878. XThe person responsible for the changes are indicated in []'s.
  879. X=========
  880. XA new command line option, -m mailbox-path, can reset the value of your
  881. Xmain (system) mailbox.  Mush will treat this new mailbox as if it were
  882. Xyour /usr/spool/mail/$USER file.  Read the man page to understand all
  883. Xthe implications of this.
  884. X[Dan Heller]
  885. X---------
  886. XThe variables, autosign2 and fortunates now take a new style of
  887. Xaddresses to specify an alternate signature or "fortune" program
  888. Xappendatures.  One side effect of this is that you can have a "local"
  889. Xsignature and a remote signature simply by specifying "!hostname"
  890. Xin your autosign2 variable.  (hostname is the name of your local
  891. Xhost).  The old format is still supported, but the new syntax supports
  892. Xsome new funtionality.  I set mine to:
  893. X
  894. X    set autosign2 = "!island @berkeley.edu @mit.edu *schaefer root: \--dan"
  895. X
  896. XThis means that any mail I send to 1) anyone at island, 2) anyone at
  897. Xberkeley, 3) anyone at mit, 4) bart shcaefer, wherever he may be,
  898. Xand 4) root on my local machine only (this includes root@my-machine-name)
  899. Xwill be signed  by my "alternate" signature.  If any address on the
  900. Xrecipient list fails to satisfy these four matches, the mail will be
  901. Xsigned by my regular signature.  More precisely, the syntax is:
  902. X
  903. XThe list of recipients, after alias expansion and comment removal, is
  904. Xthen scanned and the following patterns are matched against those addresses
  905. Xspecified in the autosign2 or fortunates variable according to these rules.
  906. X
  907. X    user *user !host !path!name @dom.ain host!user
  908. X
  909. Xuser    the user is on the local host only.  user!localhost will also match.
  910. X*user    the address matches regardless of the path to the user.
  911. X    includes: user, user@host1, host2!user, ...!path!user
  912. X!host    matches any user who resides on the specified host.
  913. X    includes: ...!foo!bar!host!user
  914. X!host1!host2  just like above, but path is more specific:
  915. X    includes: ...!foo!bar!host1!host2!user
  916. X@dom.ain  matches any user whose destination host lies within the domain.
  917. X    includes: ...!host.dom.ain.etc!user
  918. X[Dan Heller]
  919. X---------
  920. XVariable modifiers :t and :h are now supported.  If a variable expands
  921. Xto a filename, the head of the path (up to the filename itself) is
  922. Xreturned for :h, and the title of the path (filename itself) is returned
  923. Xfor :t.  Thus, you could set your prompt:
  924. X    a fo 'fo \!*; set prompt = "! [$thisfolder:t] "'
  925. XWhenever you change folders, your prompt will tell you the name
  926. Xof the folder you're in.
  927. X[Bart Schaefer]
  928. X---------
  929. XThe alternates command (alts) now supports the added feature of
  930. Xalternate login names as well as paths to login names.  If you
  931. Xhave another login name on the local machine or on a remote machine,
  932. Xspecify this in the alts command as "!login" or "!path!to!login"
  933. XThe point is, precede the login name or path by a !.
  934. X[Dan Heller]
  935. X---------
  936. XIf someone else updates your folder while you're in it, mush will
  937. Ximmediately modify your folder to reflect the current version of
  938. Xthe folder.  You would therefore lose any changes you made, so be
  939. Xsure that no one else uses the same folder you do while you're
  940. Xusing it.
  941. X[Dan Heller]
  942. X---------
  943. XArguments to mush may be "clumped" together when appropriate... Like
  944. X% mush -CS
  945. XAlso, there are now long names for arguments... such as
  946. X% mush -shell -curses
  947. XFinally, it is now possible to specify blind-carbon recipients on the
  948. Xcommand line, with the -b (-blind) option.
  949. X[Bart Schaefer]
  950. X---------
  951. XCommand parsing has been improved.  Notably, handling of commands appearing
  952. Xto the right of `|' or `;' separators has been made uniform with that for
  953. Xcommands at the beginning of a line.  Variable expansions in commands to the
  954. Xright of a `;' now take place _after_ the command to the left has been run.
  955. XQuoting of separators (e.g. '|' or ";") also works properly, but you still
  956. Xcan't generate null arguments with empty quotes (sigh).
  957. XThis now allows you to do things like:
  958. X    cmd cd 'cd \!*; set prompt = "[$cwd] "'
  959. Xwhereas it didn't used to before.
  960. X
  961. XAlso, message lists are now separated only from command names to the left,
  962. Xnot from other strings to the right.  This means that
  963. X    save 3 ../msg_three
  964. Xwill save message 3 in the file "msg_three" in the parent directory, rather
  965. Xthan attempting to save messages 3 and the current message in "/msg_three".
  966. XSimilarly, a command like
  967. X    write12somefile
  968. Xwill be parsed as "write 12somefile" and will therefore save the current
  969. Xmessage in "12somefile" in the current directory.
  970. X[Bart Schaefer]
  971. X---------
  972. XThe tilde-escapes, ~c and ~b now work like ~t in that they append addresses
  973. Xspecified on the tilde line:
  974. X    ~c root
  975. Xwill append the user root rather than replace the entire Cc list.
  976. X[Dan Heller]
  977. X---------
  978. XWhen replying to multiple messages, all the messages will be replied to
  979. Xat once rather than one at a time as it was before.
  980. X    reply 2 4 6 -i 6 8
  981. Xwill reply to all the authors of messages 2 4 and 6 and include in the
  982. Xtext of the message the contents of messages 6 and 8.
  983. X[Dan Heller]
  984. X---------
  985. XWhen appropriate, the terminal settings for erase, word erase, line kill,
  986. Xetc. special characters are now examined BEFORE the mush defaults, so
  987. Xconflicts will now be resolved in favor of the stty settings.  For example,
  988. Xthis allows the delete character (\177, ^?) to be defined as line kill;
  989. Xpreviously, mush would have interpreted ^? as character erase.
  990. X[Bart Schaefer]
  991. X---------
  992. XYou can now save a list of messages in a variable by piping mush
  993. Xcommands to the "set" command.  For example,
  994. X
  995. Xmush> pick -f argv | set argv_msgs
  996. X
  997. XThe variable $argv_msgs will be a string which can be used as the
  998. Xmsg_list argument to other commands.  So you can type: save $argv_msgs
  999. X[Dan Heller]
  1000. X---------
  1001. Xvariable testing can be done via "$?variable" --if the variable
  1002. Xis set, then the string "1" is returned.  Otherwise, "0" is.
  1003. X[Dan Heller]
  1004. X---------
  1005. XIf-else-endif statements in the initialization file can now be nested.
  1006. XThey also understand the $?variable syntax, e.g.,
  1007. X    if ! $?autoedit
  1008. X    set wrapcolumn=75
  1009. X    else
  1010. X    if ! $?editor
  1011. X        set editor=/usr/local/bin/emacs
  1012. X    endif
  1013. X    endif
  1014. XNote that there is no "elseif" syntax, and the "else" must still be on
  1015. Xa line by itself.
  1016. X[Bart Schaefer]
  1017. X---------
  1018. XA new variable $thisfolder has been added.  Its value is the full path name
  1019. Xof the current folder.  $thisfolder cannot be changed by the "set" command.
  1020. XInstead, it changes automatically whenever a new folder is entered.  For
  1021. Xexample,
  1022. X    cmd fo 'folder \!*; set prompt="$thisfolder "'
  1023. X
  1024. XWhen initialization files are read (before a folder has been loaded),
  1025. X$thisfolder is not set, so $?thisfolder can be used in a test around
  1026. Xother commands that manipulate messages.  Example:
  1027. X    if $?thisfolder
  1028. X    sort -d
  1029. X    pick -f argv | save +argv_msgs | d
  1030. X    endif
  1031. X[Bart Schaefer]
  1032. X---------
  1033. XThe new variable $curses_help may be set to a list of curses command names.
  1034. XThe key bindings for the commands in this list will be displayed in a menu
  1035. Xformat on the last few lines of the curses screen.  If $curses_help is set,
  1036. Xbut not to a value, then a default list of commands is used.  See the file
  1037. Xconfig.h-dist for the default menu.  Note that the commands listed in this
  1038. Xvariable should be separated by spaces or tabs, not commas.
  1039. X[Bart Schaefer]
  1040. X---------
  1041. XLinewrapping in composition mode is available through a new
  1042. Xvariable, $wrapcolumn; set it to the last column in which you want
  1043. Xcharacters to appear.
  1044. X[Bart Schaefer]
  1045. X---------
  1046. XMacros ala vi are now available in three flavors: curses, line mode,
  1047. Xand composition mode.  See new commands, below.
  1048. X[Bart Schaefer, Dan Heller]
  1049. X---------
  1050. XSupport for MMDF and for system mailboxes kept in each user's home
  1051. Xdirectory have been added.  #define MMDF and/or HOMEMAIL in config.h.
  1052. X[Marc Rouleau]
  1053. X=========
  1054. X
  1055. XNew commands and command options:
  1056. X=========
  1057. XA new command, edit, has been introduced to allow you to edit
  1058. Xmessages.  See the man page, but it's pretty straightforward.
  1059. X[Dan Heller]
  1060. X---------
  1061. XThe command, pipe, allows you to invoke unix commands with
  1062. Xmessage text as standard input.  For example,
  1063. X
  1064. Xmush> pipe patch
  1065. X
  1066. Xsends the current message to "patch".  See the man page for details.
  1067. X[Bart Schaefer & Dan Heller, instigated by Marc Rouleau]
  1068. X---------
  1069. XThe write/save/copy commands now have the options -a and -s.  This
  1070. Xmeans, save the message according to the author or subject (respectively).
  1071. XSo, if you type "save -s" and the subject of the message was "READ ME"
  1072. Xthen the message will be saved in a file called "READ_ME".  Note that
  1073. Xspaces and slashes are converted to underscores.
  1074. X
  1075. XA directory name may be specified:
  1076. X
  1077. Xmush> save -a $folder
  1078. X
  1079. XThen mush will save the current message to the file described by the
  1080. Xauthor of the message's login name in your folder directory.
  1081. X[Dan Heller]
  1082. X---------
  1083. XThe mail/reply/replyall commands now have options -b and -c to specify
  1084. Xblind-carbon and carbon-copy recipients.  These are most useful in
  1085. Xconjunction with the -f option, because forwarding does not allow the
  1086. Xuse of the ~c and ~b escapes (unless the -e option was given).
  1087. X[Bart Schaefer]
  1088. X---------
  1089. XThe -f option to mail now forwards mail in such a way as to retain all
  1090. Xthe original headers of the message -- "Resent-" fields are added by
  1091. Xmush according to RFC822.  Note that this makes "replying" to messages
  1092. Xthat have been forwarded potentially tricky.  The reply_to_hdr variable
  1093. Xmay specify headers to build a reply-path, yet the headers may be
  1094. Xinconsistent from message to message.  It is advised to set reply_to_hdr
  1095. Xto be "From:" when trying to reply to forwarded messages to heighten the
  1096. Xprobability of a correct return address to the _original_ author.  Otherwise,
  1097. Xthe return address will probably be that of the forwarder.
  1098. X[Dan Heller]
  1099. X---------
  1100. XThe previously undocumented "flags" command has become documented and
  1101. Xhas picked up some new options.  See the man page for details.
  1102. X[Dan Heller]
  1103. X---------
  1104. XA new command "eval" has been added, analogous to the sh and csh "eval".
  1105. X[Bart Schaefer]
  1106. X---------
  1107. XCommands bind-macro, map, and map! have been added for creating macros.
  1108. XSee the descriptions of these commands in the man page, and the new man
  1109. Xpage section on MACROS.  New curses functions for each of these have
  1110. Xalso been created.  Currently, the unmap and unmap! commands can only be
  1111. Xused from line mode; "unbind" will remove curses mode macros.
  1112. X[Dan Heller, Bart Schaefer]
  1113. X---------
  1114. XAnother new variable, $nonobang, lets you turn off those annoying
  1115. X"event not found" messages without shutting history off altogether.
  1116. XWhen nonobang is set, failed history references simply do not expand;
  1117. Xthe effect is similar to csh's "nonomatch" for filename expansions.
  1118. X[Bart Schaefer]
  1119. X---------
  1120. XThe undigest command disassembles digests into the set of messages which
  1121. Xcomprises it.  The -m option will merge these messages into the current
  1122. Xfolder.  Otherwise, if a filename is specified, a new folder is created
  1123. Xand the user can change folders to read the messages separately.
  1124. XIf a message list is specified, each digest is disassembled to the same
  1125. Xfilename (if given).  If no filename is given and the user did not request
  1126. Xa merge, then a temporary file is made.
  1127. X[Dan Heller, Bart Schaefer]
  1128. X---------
  1129. Xdead.letter is now saved in mbox format.
  1130. X[Dan Heller]
  1131. X---------
  1132. Xuucp-style mbox formats with From uucp and >From lines are now collapsed
  1133. Xinto the "correct" From line format.  All the >From lines are removed
  1134. Xand the mailbox is stored in the format permenantly.  This does not apply
  1135. Xto read-only folders.
  1136. X[Dan Heller]
  1137. X=========
  1138. X
  1139. XChanges to old commands/functions/variables:
  1140. X=========
  1141. XCurses functions referenced by the "bind" command no longer have two-word
  1142. Xnames.  "delete list", "mail flags", etc. have been replaced by hyphenated
  1143. Xcommands "delete-list", "mail-flags", etc.  The "search" commands have
  1144. Xchanged from "search down" to "search-back", "search up" to "search-next"
  1145. Xand "search cont" to "search-again", to avoid confusion with "up" and "down"
  1146. Xreferring to message number rather than to screen direction.  "show hdr" is
  1147. Xno longer a recognized name.
  1148. X[Bart Schaefer, Dan Heller]
  1149. X---------
  1150. XThe show_deleted variable now controls whether or you you can display
  1151. Xdeleted messages in addition to whether to display their headers for a
  1152. Xheaders command.  All other mush commands affect all messages regardless
  1153. Xof whether or not they are deleted.  Commands that wish to not affect
  1154. Xdeleted messages should prepend the command with "* {`:d`} |"
  1155. X[Dan Heller]
  1156. X---------
  1157. XThe "screen-back" curses function (default 'Z') now places the current
  1158. Xmessage at the bottom of the screen instead of the top.  Both the
  1159. X"screen-back" and "screen-next" (default 'z') commands will leave the
  1160. Xcurrent message unchanged if it is still visible on the new screen.
  1161. X[Bart Schaefer]
  1162. X---------
  1163. XThe "next-msg" curses function (default 'j') will now scroll downward
  1164. Xfrom the bottom of the page whenever there are blank lines available
  1165. Xon the screen.  It stops when the last message or the bottom of the
  1166. Xscreen is reached.
  1167. X[Dan Heller]
  1168. X---------
  1169. XThe "saveopts" command now saves all bindings and macros, as well as
  1170. Xvariable settings, aliases, etc.  Note that this also saves the system
  1171. Xdefaults, too.  Using saveopts will probably create very large .mushrc
  1172. Xfiles.
  1173. X[Bart Schaefer]
  1174. X---------
  1175. Xecho now understands -h and -p flags.  When -h is used, the arguments
  1176. Xare treated as if you changed your header format to the argument(s) and
  1177. Xthe current message header is printed using those formatting args.  The
  1178. X-p flag is as if you changed your prompt to the given arguments.  This
  1179. Xallows the user to do things like:
  1180. X    echo -h This message is from %n and was dated on %d.
  1181. X    echo -p There are %u unread messages in folder %f.
  1182. X[Dan Heller]
  1183. X---------
  1184. Xreply_to_hdr now understands From_ to mean the colon-less From line.
  1185. XNow, you can say:
  1186. X    set reply_to_hdr = "reply-to, return-path, sender, from_"
  1187. Xpreviously, you could only specify the From_ header by setting
  1188. Xreply_to_hdr to a null value.  Also, regardless of which header
  1189. Xthe return path is gotten from, the "name" is always taken from
  1190. Xthe From: header if it exists.  The result is a To: line which
  1191. Xcontains the user's name and address.
  1192. X[Dan Heller]
  1193. X---------
  1194. XWhile composing a message, if new mail arrives, then you will be
  1195. Xnotified accordingly and you may continue composing your letter.
  1196. XThis does not happen if you are in an editor.  This is not a feature
  1197. Xwhich can be turned off.
  1198. X[Dan Heller]
  1199. X---------
  1200. XThe day-of-week formatting parameter for the prompt formatting
  1201. Xstring and the header formatting string ("prompt" and "hdr_format")
  1202. Xhas changed from %D to %W altho the old method is still supported
  1203. Xeven tho it's not documented.
  1204. X[Dan Heller]
  1205. X---------
  1206. XA new formatting parameter for hdr_format: %i produces the message-id
  1207. Xof the message in question.  This is a header not produced by OLD_MAILER
  1208. Xtype MTA's.
  1209. X[Dan Heller]
  1210. X---------
  1211. Xconfig.h --a new macro HDRSIZ is available to redefine how large a
  1212. Xmail message header can be.  This was based on the fact that some
  1213. Xsystems' BUFSIZ is not very large and that some To: headers can
  1214. Xexceed that size.  This resulted in a truncated reply list.  HDRSIZ
  1215. Xis defined to be BUFSIZ by default.  It should *not* be redefined
  1216. Xto a value less than BUFSIZ, but it can be increased.
  1217. X[Dan Heller]
  1218. X---------
  1219. XMAX_HOST_NAMES define has gone away in config.h -- there is no more
  1220. Xlimit on hostnames that your host can be called.  By default, the
  1221. Xhostname is the legal hostname the system thinks it is, and the
  1222. Xrest of the names are set by various other sources.  The user can
  1223. Xadd to or override these names at any time.
  1224. X[Dan Heller]
  1225. X---------
  1226. Xmakefile.x386 and makefile.x286 have gone away and replaced by
  1227. Xmakefile.xenix.  See the README and the makefile itself if you
  1228. Xrun xenix.
  1229. X[Dan Heller]
  1230. X=========
  1231. X
  1232. END_OF_FILE
  1233. if test 16322 -ne `wc -c <'README-6.4'`; then
  1234.     echo shar: \"'README-6.4'\" unpacked with wrong size!
  1235. fi
  1236. # end of 'README-6.4'
  1237. fi
  1238. if test -f 'check.pr' -a "${1}" != "-c" ; then 
  1239.   echo shar: Will not clobber existing file \"'check.pr'\"
  1240. else
  1241. echo shar: Extracting \"'check.pr'\" \(240 characters\)
  1242. sed "s/^X//" >'check.pr' <<'END_OF_FILE'
  1243. X/* "@(#)check.pr    2.2    9/3/86 (Dan Heller)"; */
  1244. X
  1245. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1246. X */
  1247. X    0x0000,0x0000,0x0001,0x0003,0x0007,0x000E,0x001C,0x0038,
  1248. X    0xC070,0xE0E0,0x71C0,0x3B80,0x1F00,0x0E00,0x0400,0x0000
  1249. END_OF_FILE
  1250. if test 240 -ne `wc -c <'check.pr'`; then
  1251.     echo shar: \"'check.pr'\" unpacked with wrong size!
  1252. fi
  1253. # end of 'check.pr'
  1254. fi
  1255. if test -f 'coffee.cup.pr' -a "${1}" != "-c" ; then 
  1256.   echo shar: Will not clobber existing file \"'coffee.cup.pr'\"
  1257. else
  1258. echo shar: Extracting \"'coffee.cup.pr'\" \(193 characters\)
  1259. sed "s/^X//" >'coffee.cup.pr' <<'END_OF_FILE'
  1260. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1261. X */
  1262. X    0x0200,0x0100,0x0600,0x0800,0x0600,0x0100,0xFFF8,0x800C,
  1263. X    0x800A,0x4012,0x401C,0x2020,0x9048,0x7FF0,0x3FE0,0x0000
  1264. END_OF_FILE
  1265. if test 193 -ne `wc -c <'coffee.cup.pr'`; then
  1266.     echo shar: \"'coffee.cup.pr'\" unpacked with wrong size!
  1267. fi
  1268. # end of 'coffee.cup.pr'
  1269. fi
  1270. if test -f 'cycle.pr' -a "${1}" != "-c" ; then 
  1271.   echo shar: Will not clobber existing file \"'cycle.pr'\"
  1272. else
  1273. echo shar: Extracting \"'cycle.pr'\" \(241 characters\)
  1274. sed "s/^X//" >'cycle.pr' <<'END_OF_FILE'
  1275. X/* "@(#)cycle.pr    2.2    9/3/86 (Dan Heller)"; */
  1276. X
  1277. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1278. X */
  1279. X    0x07C0,0x0FE0,0x1834,0x301C,0x601C,0x203C,0x0000,0x0000,
  1280. X    0x7808,0x700C,0x7018,0x5830,0x0FE0,0x07C0,0x0000,0x0000
  1281. X
  1282. END_OF_FILE
  1283. if test 241 -ne `wc -c <'cycle.pr'`; then
  1284.     echo shar: \"'cycle.pr'\" unpacked with wrong size!
  1285. fi
  1286. # end of 'cycle.pr'
  1287. fi
  1288. if test -f 'dn.arrow.pr' -a "${1}" != "-c" ; then 
  1289.   echo shar: Will not clobber existing file \"'dn.arrow.pr'\"
  1290. else
  1291. echo shar: Extracting \"'dn.arrow.pr'\" \(243 characters\)
  1292. sed "s/^X//" >'dn.arrow.pr' <<'END_OF_FILE'
  1293. X/* "@(#)dn.arrow.pr    2.2    9/3/86 (Dan Heller)"; */
  1294. X
  1295. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1296. X */
  1297. X    0xFFFF,0x8001,0xBFFD,0xBFFD,0xBFFD,0x9FF9,0x8FF1,0x87E1,
  1298. X    0x83C1,0x8181,0xB825,0xA435,0xA42D,0xB825,0x8001,0xFFFF
  1299. END_OF_FILE
  1300. if test 243 -ne `wc -c <'dn.arrow.pr'`; then
  1301.     echo shar: \"'dn.arrow.pr'\" unpacked with wrong size!
  1302. fi
  1303. # end of 'dn.arrow.pr'
  1304. fi
  1305. if test -f 'envelope.pr' -a "${1}" != "-c" ; then 
  1306.   echo shar: Will not clobber existing file \"'envelope.pr'\"
  1307. else
  1308. echo shar: Extracting \"'envelope.pr'\" \(247 characters\)
  1309. sed "s/^X//" >'envelope.pr' <<'END_OF_FILE'
  1310. X/* "@(#)envelope.cursor    2.2    9/3/86 (Dan Heller)"; */
  1311. X
  1312. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1313. X */
  1314. X    0x0000,0x0000,0xFFFF,0xC003,0xA005,0x9009,0x8811,0x8421,
  1315. X    0x8241,0x8181,0x8001,0x8001,0x8001,0xFFFF,0x0000,0x0000
  1316. END_OF_FILE
  1317. if test 247 -ne `wc -c <'envelope.pr'`; then
  1318.     echo shar: \"'envelope.pr'\" unpacked with wrong size!
  1319. fi
  1320. # end of 'envelope.pr'
  1321. fi
  1322. if test -f 'glasses.pr' -a "${1}" != "-c" ; then 
  1323.   echo shar: Will not clobber existing file \"'glasses.pr'\"
  1324. else
  1325. echo shar: Extracting \"'glasses.pr'\" \(246 characters\)
  1326. sed "s/^X//" >'glasses.pr' <<'END_OF_FILE'
  1327. X/* "@(#)glasses.cursor    2.2    9/3/86 (Dan Heller)"; */
  1328. X
  1329. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1330. X */
  1331. X    0x0000,0x0000,0x0C06,0x1209,0x1209,0x2211,0x2010,0x4020,
  1332. X    0x4020,0x8C40,0xF3C0,0x8C40,0x8C40,0x8C40,0x7380,0x0000
  1333. END_OF_FILE
  1334. if test 246 -ne `wc -c <'glasses.pr'`; then
  1335.     echo shar: \"'glasses.pr'\" unpacked with wrong size!
  1336. fi
  1337. # end of 'glasses.pr'
  1338. fi
  1339. if test -f 'options.h' -a "${1}" != "-c" ; then 
  1340.   echo shar: Will not clobber existing file \"'options.h'\"
  1341. else
  1342. echo shar: Extracting \"'options.h'\" \(1157 characters\)
  1343. sed "s/^X//" >'options.h' <<'END_OF_FILE'
  1344. X/* @(#)options.h    (c) copyright 10/10/88 (Dan Heller, Bart Schaefer) */
  1345. X
  1346. X/* Must #include mush.h before #including this file */
  1347. X
  1348. X/* Structure to hold assorted information collected from command line flags.  
  1349. X *  Other information is held in the following global variables:
  1350. X *    cmd_help    General help file, specified by -1
  1351. X *    debug        Debugging mode, toggled by -d
  1352. X *    glob_flags    Bits set by -C, -e, -i, -S, -t and many commands
  1353. X *    hdrs_only    Show headers and exit, specified by -H
  1354. X *    iscurses    Curses mode, specified by -C or "curses" command
  1355. X *    istool        Tool mode, specified by -t or -T
  1356. X *    mailfile    File specified by -u or -f or "folder" command
  1357. X *    prog_name    Name under which mush is running
  1358. X *    time_out    Tool mode timeout, specified by -T
  1359. X *    tool_help    Tool mode help file, specified by -2
  1360. X */
  1361. X
  1362. Xstruct mush_flags {
  1363. X    u_long flg;        /* Set by -v and some vars; passed to mail_someone() */
  1364. X    char *src_file;    /* Set by -F */
  1365. X    int src_n_exit;    /* Set by -F! */
  1366. X    char f_flags[10];    /* Set by -r, -N, etc.; passed to folder() */
  1367. X    char *Subj;        /* Set by -s */
  1368. X    char *Cc;        /* Set by -c */
  1369. X    char *Bcc;        /* Set by -b */
  1370. X    int source_rc;    /* Set by -n */
  1371. X};
  1372. END_OF_FILE
  1373. if test 1157 -ne `wc -c <'options.h'`; then
  1374.     echo shar: \"'options.h'\" unpacked with wrong size!
  1375. fi
  1376. # end of 'options.h'
  1377. fi
  1378. if test -f 'up.arrow.pr' -a "${1}" != "-c" ; then 
  1379.   echo shar: Will not clobber existing file \"'up.arrow.pr'\"
  1380. else
  1381. echo shar: Extracting \"'up.arrow.pr'\" \(243 characters\)
  1382. sed "s/^X//" >'up.arrow.pr' <<'END_OF_FILE'
  1383. X/* "@(#)up.arrow.pr    2.2    9/3/86 (Dan Heller)"; */
  1384. X
  1385. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1386. X */
  1387. X    0xFFFF,0x8001,0xA439,0xA425,0xA439,0x9821,0x8181,0x83C1,
  1388. X    0x87E1,0x8FF1,0x9FF9,0xBFFD,0xBFFD,0xBFFD,0x8001,0xFFFF
  1389. END_OF_FILE
  1390. if test 243 -ne `wc -c <'up.arrow.pr'`; then
  1391.     echo shar: \"'up.arrow.pr'\" unpacked with wrong size!
  1392. fi
  1393. # end of 'up.arrow.pr'
  1394. fi
  1395. if test -f 'write.pr' -a "${1}" != "-c" ; then 
  1396.   echo shar: Will not clobber existing file \"'write.pr'\"
  1397. else
  1398. echo shar: Extracting \"'write.pr'\" \(244 characters\)
  1399. sed "s/^X//" >'write.pr' <<'END_OF_FILE'
  1400. X/* "@(#)write.cursor    2.2    9/3/86 (Dan Heller)"; */
  1401. X
  1402. X/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
  1403. X */
  1404. X    0x0018,0x002C,0x0056,0x00A4,0x0148,0x0290,0x0520,0x0A40,
  1405. X    0x1080,0x2100,0x4200,0xE400,0xE800,0xF000,0xE000,0x0000
  1406. END_OF_FILE
  1407. if test 244 -ne `wc -c <'write.pr'`; then
  1408.     echo shar: \"'write.pr'\" unpacked with wrong size!
  1409. fi
  1410. # end of 'write.pr'
  1411. fi
  1412. echo shar: End of archive 1 \(of 19\).
  1413. cp /dev/null ark1isdone
  1414. MISSING=""
  1415. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
  1416.     if test ! -f ark${I}isdone ; then
  1417.     MISSING="${MISSING} ${I}"
  1418.     fi
  1419. done
  1420. if test "${MISSING}" = "" ; then
  1421.     echo You have unpacked all 19 archives.
  1422.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1423. else
  1424.     echo You still need to unpack the following archives:
  1425.     echo "        " ${MISSING}
  1426. fi
  1427. ##  End of shell archive.
  1428. exit 0
  1429.